Partnerzy
PolProg
Lomsel
KonradVme

Serwer sponsoruje

Certyfikaty

Valid HTML 4.01!
Valid CSS!

Podstawy szyfrowania

Witam ponownie po udanym artykule o pisaniu edytora graficznego. W tym arcie przedstawię sposoby szyfrowania tekstu.

Wymagania:
- Borland Delphi (chyba dowolna wersja, ja pracuję na Delphi 5)
- podstawy programowania w Delphi

Dla początkujących polecam Delphi-Kurs Adama Boducha, który można pobrać ze strony www.4programmers.net oraz FAQ i artykuły z mojej strony http://mick567.webpark.pl/.

Najprostszym, ale jednocześnie najmozolniejszym sposobem szyfrowania tekstu jest podmienianie jednych znaków drugimi. Posłużę się tutaj przykładem z mojego pierwszego programu do szyfrowania. Wstaw na formę dwa TMemo oraz jeden TButton i wklej taki kod do procedury OnClick:

var
  S, Code : String;
  I, Len : Integer;
begin
  S := Memo1.Lines.Text;
  Len := Length(S);
  for I := 1 to Len do
    begin
      if (S[i] = 'A') or (S[i] = 'a') then
        Code := Code + '!';
      if (S[i] = 'B') or (S[i] = 'b') then
        Code := Code + '@';
      if (S[i] = 'C') or (S[i] = 'c') then
        Code := Code + '#';
      if (S[i] = 'D') or (S[i] = 'd') then
        Code := Code + '0';
      if (S[i] = 'E') or (S[i] = 'e') then
        Code := Code + '9';
      if (S[i] = 'F') or (S[i] = 'f') then
        Code := Code + '`';
      if (S[i] = 'G') or (S[i] = 'g') then
        Code := Code + '$';
      if (S[i] = ' ') then
        Code := Code + ' ';
      if (S[i] = 'H') or (S[i] = 'h') then
        Code := Code + '+';
      if (S[i] = 'I') or (S[i] = 'i') then
        Code := Code + '*';
      if (S[i] = 'J') or (S[i] = 'j') then
        Code := Code + '=';
        if (S[i] = 'K') or (S[i] = 'k') then
        Code := Code + '7';
        if (S[i] = 'L') or (S[i] = 'l') then
        Code := Code + '2';
        if (S[i] = 'Ł') or (S[i] = 'ł') then
        Code := Code + '&';
        if (S[i] = 'M') or (S[i] = 'm') then
        Code := Code + 'C';
        if (S[i] = 'N') or (S[i] = 'n') then
        Code := Code + '/';
        if (S[i] = 'O') or (S[i] = 'o') then
        Code := Code + '[';
        if (S[i] = 'P') or (S[i] = 'p') then
        Code := Code + ']';
        if (S[i] = 'R') or (S[i] = 'r') then
        Code := Code + '\';
        if (S[i] = 'S') or (S[i] = 's') then
        Code := Code + '(';
        if (S[i] = 'T') or (S[i] = 't') then
        Code := Code + ')';
        if (S[i] = 'U') or (S[i] = 'u') then
        Code := Code + '^';
        if (S[i] = 'Ó') or (S[i] = 'ó') then
        Code := Code + '?';
        if (S[i] = 'W') or (S[i] = 'w') then
        Code := Code + '<';
        if (S[i] = 'Y') or (S[i] = 'y') then
        Code := Code + '>';
        if (S[i] = 'Z') or (S[i] = 'z') then
        Code := Code + ';';
        if (S[i] = 'Ż') or (S[i] = 'ż') then
        Code := Code + '"';
        if (S[i] = 'Ź') or (S[i] = 'ź') then
        Code := Code + '{';
        if (S[i] = 'Ć') or (S[i] = 'ć') then
        Code := Code + '~';
        if (S[i] = 'Ś') or (S[i] = 'ś') then
        Code := Code + '~';

    end;
  Memo2.Lines.Clear;
  Memo2.SelText := Code;

Ten kod sprawdza kolejno znaki w Memo1 i je podmienia na inne. Jak już pisałem, ta metoda jest bardzo prymitywna i bardzo mozolna, na dodatek nie ma uwzględnionych cyfr (chociaż można je dopisać) oraz innych znaków typu 'Char' np: "~`<>/\[]{};:*-+," i wiele, wiele innych (jest ich o wiele więcej niż na klawiaturze, około 255).

Teraz będzie nieco bardziej zaawansowana metoda zwana "metodą xorowania". Sam nie wiem dokładnie na czym polega ale mogę powiedzieć, że ta procedura została wykorzystana przy tworzeniu znanego trojana, jakim jest "Prosiak". Oto kod, który należy wkleić pod napisem 'implementation':

function des(s: string): string;
var
  i: integer;
begin
  randseed := length(s) * 15;
  for i := 1 to length(s) do
  begin
    s[i] := char(ord(s[i]) xor random(255));
    Result := s;
  end;
end;

... a używa się jej tak...

Edit1.Text := des('http://mick567.webpark.pl');

Jest jeszcze jedna metoda, którą znam i chciałbym zaprezentować (potrzebne dwa TEdit i TButton):

var
  i : Integer;
  txt : String;
  znak : char;
  kod : byte;
  nowy : string[100]='';
begin
  txt := Edit1.Text;
  for i:=0 to Length(txt) do begin
  znak := txt[i];  {256}
  kod := byte(znak);
  kod := kod -1;
  nowy := nowy + chr(kod);
end;

  Edit2.Text:=nowy;
  nowy:='';

Ten kod sprawdza indeks danego znaku odejmuje od niego 1 i przetwarza z powrotem na znak. Do deszyfrowania powstałego tekstu wystarczy taka procedura:

var
  i : Integer;
  txt : String;
  znak : char;
  kod : byte;
  nowy : string[100]='';
begin
  txt := Edit1.Text;
  for i:=0 to Length(txt) do begin
  znak := txt[i];  {256}
  kod := byte(znak);
  kod := kod +1;
  nowy := nowy + chr(kod);
end;

  Edit2.Text:=nowy;
  nowy:='';

Ta procedura jest podobna do poprzedniej z tym, że tutaj się dodaje 1 a nie odejmuje ja poprzednio.

Jakbyście czegoś nie rozumieli to piszcie na hidden3@wp.pl, zapraszam też do odwiedzenia mojej stronki z chamskimi programami

Na razie!

Autor: Michał Pawluczuk
Mail: hidden3@wp.pl
Website: http://mick567.webpark.pl/
http://www.xlog.prv.pl
GG: 4450067

 

Spis treści Redakcja @t Newsy
Software Hardware Internet Webmastering System Programowanie Grafika Telefonia Film Gry Magazyn Humor

Spis treści